home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / ApiHooks 3.0 / MODWORKS.INC < prev    next >
Encoding:
Text File  |  2000-06-18  |  4.1 KB  |  89 lines

  1. ;------------------------------------------------------------------------------
  2. ;This remote code performs (after modifications) module operations:
  3. ;loading, unloading and testing presence of the module
  4.  
  5. ALIGN 4    ;for better copying
  6. UnloadScout        :
  7.  
  8.  ASSUME EDI: PTR DWORD
  9.  
  10.     DllOperation        EQU    [EDI][_DllOperation   - UnloadDLL]
  11.     FreeLibrary         EQU    [EDI][_FreeLibrary    - UnloadDLL]
  12.     GetProcAddr         EQU    [EDI][_GetProcAddr    - UnloadDLL]
  13.     UnloadCount         EQU    [EDI][_UnloadCount    - UnloadDLL]
  14.     CallDllApi          EQU    [EDI][_CallDllApi     - UnloadDLL]
  15.  
  16.   UnloadThread PROC
  17.                PUSHp  EAX, EDI
  18.                CALL   UnloadDelta
  19.               UnloadDelta:
  20.                POP    EDI
  21.                ADD    EDI, (UnloadDLL - UnloadDelta)  ;now everything is realtive to UnloadDLL
  22.  
  23.                SUB    EAX, EAX
  24.                CALL   @F
  25.  
  26. ;==============TxHandler      exception handler
  27.                MOV    EDX, [ESP+12] ;context
  28.                CALL   UnloadDelta1                        ;get delta
  29.               UnloadDelta1:
  30.                POP    EAX
  31.                ADD    EDX, CONTEXT.regEip
  32.                ADD    EAX, (UnloadDrWatson-UnloadDelta1)   ;new EIP = DrWatson
  33.                PUSH   [ESP+8]                              ;new ESP
  34.                MOV    [EDX+CONTEXT.regEip-CONTEXT.regEip], EAX
  35.                POP    [EDX+CONTEXT.regEsp-CONTEXT.regEip]
  36.                SUB    EAX, EAX     ;ExceptionContinueExecution
  37.                RETN
  38. ;==============TxHandler
  39.              @@:
  40.                PUSH   FS:FS:(TEB PTR [EAX]).ExceptionList  ;build xframe , required!
  41.                MOV    FS:FS:(TEB PTR [EAX]).ExceptionList, ESP
  42.  
  43.              NextLoop::
  44.                sWin32 DllOperation, EDI   ;call GetModuleHandle or LoadLibrary
  45.                DEC    UnloadCount         ;how many times
  46.              _JEJL::
  47.                JE     Unloaded            ;change to JL if Unload, to JNE NextLoop if LoadAndCall
  48.              ToCallProc::
  49.                JMP    NextLoop            ;change to JMP FreeLib if Unload, to JMP CallProc if LoadAnCall
  50.              FreeLib::
  51.                sWin32 FreeLibrary, EAX
  52.                JMP    NextLoop
  53.              CallProc::
  54.                TEST   EAX, EAX
  55.                JE     Unloaded        ;wanted module is mot present
  56.                PUSH   EAX             ;save module base
  57.                MOV    ECX, CallDllApi
  58.                TEST   ECX, ECX        ;NULL -> call nothing
  59.                JNE    @F
  60.                LEA    ECX, [EDI+MAX_PATH] ;ordinal or address of api name are placed beyond module name
  61.               @@:
  62.                sWin32 GetProcAddr, EAX, ECX   ;get address of api
  63.                MOV    ECX, EAX        ;api address
  64.                POP    EAX             ;restore module base
  65.                JECXZ  Unloaded        ;api doesn't exist
  66.                sWin32 ECX             ;call wanted api
  67.              Unloaded:
  68.                POP    FS:TEB.ExceptionList ;remove my xframe
  69.                POP    EDX             ;remove my xframe
  70.                POPp   EDI, ECX        ;restore used registers
  71.              UnloadStop::
  72.                DWORD  0, 0, 0         ;place reserved for RemoteExec
  73.              UnloadDrWatson:
  74.                oMOV   EAX, ErrorRemoteExec  ;was exception
  75.                JMP    Unloaded
  76.   UnloadThread ENDP
  77.  
  78.     ASSUME EDI :NOTHING
  79.     ALIGN 4
  80.    _DllOperation       DWORD  0    ;LoadLibrary or GetModuleHandle
  81.    _FreeLibrary        DWORD  0
  82.    _GetProcAddr        DWORD  0
  83.    _CallDllApi         DWORD  0    ;for LoadAndCall, address of api name or ordinal or NULL
  84.    _UnloadCount        DWORD  0    ;how many times to perform wanted operation
  85.    UnloadDLL           LABEL  ACHAR ;here is ModuleName (size MAX_PATH) followed
  86.                                     ;DllApiName (size MAX_PATH)
  87.    UnloadSize0         EQU    (($-UnloadScout+3) AND NOT 3) ;pure block size dword aligned
  88.    UnloadSize          EQU    (($-UnloadScout+MAX_PATH*2+3) AND NOT 3) ;overall size dword aligned
  89. ;------------------------------------------------------------------------------